package com.asambleacristiana.utils;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("com.asambleacristiana.utils.CuitValidator")
public class CuitValidator implements Validator {

	private static final String coef = "5432765432";

	@Override
	public void validate(FacesContext arg0, UIComponent arg1, Object value) throws ValidatorException {
		String numCuit = value.toString();
		if (numCuit.length() > 0) {
			try {
				int su = 0;
				int lCuit = numCuit.length();
				if (lCuit < 9) {
					numCuit = "00000000000";
					FacesMessage msg = new FacesMessage("El cuit ingresado es Invalido.", "El cuit ingresado es Invalido.");
					msg.setSeverity(FacesMessage.SEVERITY_ERROR);
					throw new ValidatorException(msg);
				}
				for (int i = 1; i < 11; i++) {
					String Cd1 = coef.substring(i - 1, i);
					String Cd2 = numCuit.substring(i - 1, i);
					int cf = Integer.parseInt(Cd1);
					int ct = Integer.parseInt(Cd2);
					su += (cf * ct);
				}
				int md = su / 11;
				int re = su - (md * 11);
				if (re > 1) {
					re = 11 - re;
				}
				String CdDv = numCuit.substring(lCuit - 1, lCuit);
				int dv = Integer.parseInt(CdDv);
				if (dv != re) {
					FacesMessage msg = new FacesMessage("El cuit ingresado es Invalido.", "El cuit ingresado es Invalido.");
					msg.setSeverity(FacesMessage.SEVERITY_ERROR);
					throw new ValidatorException(msg);
				}
			} catch (Exception e) {
				FacesMessage msg = new FacesMessage("El cuit ingresado es Invalido.", "El cuit ingresado es Invalido.");
				msg.setSeverity(FacesMessage.SEVERITY_ERROR);
				throw new ValidatorException(msg);
			}
		}

	}

}
